package org.plex.core;

import java.util.List;

import org.plex.model.User;
import org.plex.queue.GroupQueue;
import org.plex.queue.UserQueue;

import com.adobe.idp.taskmanager.dsc.client.queuemanager.QueueManagerException;

public interface TaskQueueManager
{
	UserQueue getEmptyUserQueue();
	
	void grantQueueAccess(long queueId, String userOidToGrant) throws QueueManagerException;

	void revokeQueueAccess(long queueId, String userOidTorevoke) throws QueueManagerException;

	List<UserQueue> getUserQueues() throws QueueManagerException;

	List<GroupQueue> getGroupQueuesForUser() throws QueueManagerException;

	long createUserQueue(UserQueue userQueue) throws QueueManagerException;

	GroupQueue getGroupQueue(String domainName, String groupCanonicalName) throws NullPointerException, QueueManagerException;

	void removeUserQueue(long queueOidToRemone) throws QueueManagerException;
	
	List<User> listSharedUsersForQueue(long queueId) throws QueueManagerException;
}
